<?php

namespace Admin\Controller;

use Think\Controller;


require 'vendor/autoload.php';  //载入
use PhpOffice\PhpSpreadsheet\Spreadsheet; //初始化
use PhpOffice\PhpSpreadsheet\Writer\Xlsx; //xlsx类，将电子表格保存到文件

class PhpssController extends Controller
{
    public function phpss()
    {
        $this->data = M('login')->select();
        $this->display();
    }

    public function phpOut()
    {
        $data = M('login')->select();
        //处理数据
        if (empty($data)) {
            exit;
        } else {

            foreach ($data as $k => $v) {
                switch ($v['client']) {
                    case 0:
                        $data[$k]['client'] = '电脑';
                        break;
                    case 1:
                        $data[$k]['client'] = '安卓';
                        break;
                    case 2:
                        $data[$k]['client'] = '苹果';
                        break;
                }
                $data[$k]['add_time'] = date('Y-m-d H:i:s', $v['add_time']);
            }
        }

        //实例化
        $spreadsheet = new Spreadsheet();
        //获取工作簿
        $sheet = $spreadsheet->getActiveSheet();
        //处理头部
        $sheet->setCellValue('A1', 'ID');
        $sheet->setCellValue('B1', '用户ID');
        $sheet->setCellValue('C1', '登陆设备');
        $sheet->setCellValue('D1', '登陆时间');
        $sheet->setCellValue('E1', '登陆ip');
        $sheet->fromArray(
            $data,
            null,
            'A2'
        );

        //协议缓存控制
        // MIME 协议，文件的类型，不设置，会默认html
        header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        // MIME 协议的扩展
        header('Content-Disposition:attachment;filename=1.xlsx');
        // 缓存控制
        header('Cache-Control:max-age=0');

        //开始导出
        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        // php://output 它是一个只写数据流, 允许你以 print 和 echo一样的方式写入到输出缓冲区。 
        $writer->save('php://output');
    }

    public function phpLoad()
    {
        // dump($_FILES);die;

        //名称
        $file = $_FILES['file']['tmp_name'];

        //创建读操作
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
        //打开文件、载入excel表格
        $spreadsheet = $reader->load($file);//------包含了实例化
        // $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        //获取总列数
        $highest = $sheet->getHighestColumn();
        //获取总行数
        $row = $sheet->getHighestRow();
        //列数 改为数字显示
        $highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highest);
        

        $log=[];
        for ($a = $highestColumnIndex; $a < $row; $a++) {
            $title = $sheet->getCellByColumnAndRow(1, $a)->getValue();
            $cat_fname = $sheet->getCellByColumnAndRow(2, $a)->getValue();
            $cat_name = $sheet->getCellByColumnAndRow(3, $a)->getValue();
            $price = $sheet->getCellByColumnAndRow(4, $a)->getValue();
            $img = $sheet->getCellByColumnAndRow(5, $a)->getValue();

            $cat_fid = M('cat')->where("name = '{$cat_fname}'")->getField('id');
            $cat_id = M('cat')->where("name = '{$cat_name}'")->getField('id');

            $data = [
                'title' => $title,
                'cat_fid' => $cat_fid['id'],
                'cat_id' => $cat_id['id'],
                'price' => $price,
                'img' => $img,
                'add_time' => time(),
            ];

            $result = M('list')->add($data);
            if ($result) {
                $log[] = '第' . $a . '条，插入成功';
            } else {
                $log[] = '第' . $a . '条，插入失败';
            }
        }

        echo json_encode(['code' => 0, 'msg' => '成功', 'data' => $log]);
    }

    public function test1()
    {
        $spreadsheet = new Spreadsheet();

        //获取工作簿
        $sheet = $spreadsheet->getActiveSheet();

        //获取单元格
        // $cell=$sheet->getCell('A1');
        // $cell=$sheet->getCellByColumnAndRow(1,1);
        //设置单元格值
        // $cell1->setValue('周小北');
        // $cell1=$sheet->getCell('A1');
        // $cell1->setValue('周小北');
        // $cell2=$sheet->getCellByColumnAndRow(1,2);
        // $cell2->setValue('李老师');
        //链式
        // $sheet->getCell('A2')->setValue('悟空');
        // $sheet->getCellByColumnAndRow(1,2)->setValue('八戒');
        //获取
        // echo '值：'.$sheet->getCell('A1')->getValue(),PHP_EOL;
        // echo '坐标：'.$sheet->getCell('A1')->getCoordinate();
        //xslx类，保存到文件
        // $write=new Xlsx($spreadsheet);
        // $write->save('1.xlsx');  //保存到根目录

        //强化单元格   setCellValue(位置,值)  setCellValueByColumnAndRow(列,行,值)
        // $sheet->setCellValue('A1', 'ID');
        // $sheet->setCellValue('B1', '姓名');
        // $sheet->setCellValue('C1', '年龄');
        // $sheet->setCellValue('D1', '身高');
        // $sheet->setCellValueByColumnAndRow(1, 2, 1);
        // $sheet->setCellValueByColumnAndRow(2, 2, '欧阳克');
        // $sheet->setCellValueByColumnAndRow(3, 2, '18岁');
        // $sheet->setCellValueByColumnAndRow(4, 2, '188cm');
        // $sheet->setCellValueByColumnAndRow(1, 3, 2);
        // $sheet->setCellValueByColumnAndRow(2, 3, '黄蓉');
        // $sheet->setCellValueByColumnAndRow(3, 3, '17岁');
        // $sheet->setCellValueByColumnAndRow(4, 3, '165cm');

        //设置单元格文字样式    先获取再设置
        // $sheet->getStyle('B2')->getFont()->setBold(true)->setName('宋体')->setSize(20);

        //单元格文字颜色
        // $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');
        // echo $sheet->getStyle('B2')->getFont()->getColor()->getRGB(), PHP_EOL;

        //单元格格式
        // $sheet->setCellValue('A2', '2019-10-10 10:10:10');
        // $sheet->getStyle('A2')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDD2);
        // $sheet->getStyle('A2')->getNumberFormat()->setFormatCode('yyyy-mm-dd');  相同
        //换行
        // $sheet->setCellValue('A1', "欧阳克\n黄蓉");
        // $sheet->getStyle('A1')->getAlignment()->setWrapText(true);
        //链接
        // $sheet->setCellValue('A1', 'www.php.cn');
        // $sheet->getCell('A1')->getHyperlink()->setUrl('http://www.php.cn');

        //使用公式
        // $sheet->setCellValue('A1', '10');
        // $sheet->setCellValue('B1', '15');
        // $sheet->setCellValue('C1', '20');
        // $sheet->setCellValue('D1', '25');
        // $sheet->setCellValue('E1', '30');
        // $sheet->setCellValue('G1', '35');
        // $sheet->setCellValue('A2', '总数：');
        // $sheet->setCellValue('B2', '=SUM(A1:G1)');
        // $sheet->setCellValue('A3', '平均数：');
        // $sheet->setCellValue('B3', '=AVERAGE(A1:G1)');
        // $sheet->setCellValue('A4', '最小数：');
        // $sheet->setCellValue('B4', '=MIN(A1:G1)');
        // $sheet->setCellValue('A5', '最大数：');
        // $sheet->setCellValue('B5', '=MAX(A1:G1)');
        // $sheet->setCellValue('A6', '最大数：');
        // $sheet->setCellValue('B6', '\=MAX(A1:G1)');   //使用转义字符   打印公式


        //批量赋值 fromArray()数组填充
        // $sheet->setCellValue('A1', 'ID');
        // $sheet->setCellValue('B1', '姓名');
        // $sheet->setCellValue('C1', '年龄');
        // $sheet->setCellValue('D1', '身高');

        // $sheet->fromArray(
        //     [
        //         [1, '欧阳克', '18岁', '188cm'],
        //         [2, '黄蓉', '17岁', '165cm'],
        //         [3, '郭靖', '21岁', '180cm']
        //     ],   //数组
        //     3,   //去除某个值
        //     'A2'   //从那里开始
        // );


        //合并单元格 对角 赋值只能给开始坐标A1
        // $sheet->mergeCells('A1:B5'); 
        // $sheet->getCell('A1')->setValue('欧阳克');
        //拆分单元格
        // $sheet->unmergeCells('A1:B5');


        //行和列操作
        // $sheet->getColumnDimension('A');  //获取一列
        // $sheet->getColumnDimension('A')->getWidth();  //获取一列宽度
        // $sheet->getColumnDimension('A')->setWidth(100);  //设置一列宽度
        // $sheet->getColumnDimension('B')->setAutoSize(true);  //设置一列自动宽度
        // $sheet->getDefaultColumnDimension()->setWidth(1);  //获取一列的默认值
        // $sheet->getRowDimension(1);  //获取一行
        // $sheet->getRowDimension(1)->getRowHeight();  //获取一行高度
        // $sheet->getRowDimension(1)->setRowHeight(100);   //设置一行高度
        // $sheet->getDefaultRowDimension()->setRowHeight(1);  //获取默认高度
        // $sheet->getHighestColumn();  //总行数
        // $sheet->getHighestRow();   //总列数

        //单元格样式  applyFromArray()
        // $styleArray = [
        //     // use PhpOffice\PhpSpreadsheet\Style\Alignment; 文件里常量，就是参数
        //     // Alignment::HORIZONTAL_CENTER 水平居中
        //     // Alignment::VERTICAL_CENTER	垂直居中
        //     'alignment' => [
        //         // 'horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中
        //         // 'vertical' => Alignment::VERTICAL_CENTER, //垂直居中
        //         'horizontal' => 'center', //水平居中
        //         'vertical' => 'center', //垂直居中
        //     ],
        //     // use PhpOffice\PhpSpreadsheet\Style\Border; 文件里常量，就是参数
        //     // Border::BORDER_THICK 边框样式
        //     'borders' => [
        //         'outline' => [
        //             // 'borderStyle' => '\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK',
        //             'borderStyle' => 'thick',
        //             'color' => ['argb' => 'FFFF0000'],
        //         ],
        //     ],
        //     'font' => [
        //         'name' => '黑体',
        //         'bold' => true,
        //         'size' => 22
        //     ]
        // ];
        // $sheet->getStyle('A1')->applyFromArray($styleArray);


        $writer = new Xlsx($spreadsheet);
        $writer->save('1.xlsx');

        $this->display();
    }


    //写入------弹框下载
    public function text2()
    {
        //实例化
        $spreadsheet = new Spreadsheet();
        //获取工作簿
        $sheet = $spreadsheet->getActiveSheet();

        //xslx文件下载      IOFactory::createWriter 写入到文件
        $sheet->setCellValue('A1', 'ID');
        $sheet->setCellValue('B1', '姓名');
        $sheet->setCellValue('C1', '年龄');
        $sheet->setCellValue('D1', '身高');
        $sheet->setCellValueByColumnAndRow(1, 2, 1);
        $sheet->setCellValueByColumnAndRow(2, 2, '欧阳克');
        $sheet->setCellValueByColumnAndRow(3, 2, '18岁');
        $sheet->setCellValueByColumnAndRow(4, 2, '188cm');

        // MIME 协议，文件的类型，不设置，会默认html
        header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        // MIME 协议的扩展
        header('Content-Disposition:attachment;filename=1.xlsx');
        // 缓存控制
        header('Cache-Control:max-age=0');

        //标题
        $sheet->setTitle('欧阳克');

        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
        // php://output 它是一个只写数据流, 允许你以 print 和 echo一样的方式写入到输出缓冲区。 
        $writer->save('php://output');
    }

    //读取表格，把表格读取进入数据库
    public function text3()
    {
        //创建读操作
        $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
        //打开文件、载入excel表格
        $spreadsheet = $reader->load('1.xlsx');
        //获取活动工作薄
        $sheet = $spreadsheet->getActiveSheet();

        //获取单元格值和坐标
        $cellC1 = $sheet->getCell('B2');
        echo '值: ', $cellC1->getValue(), PHP_EOL;
        echo  '坐标: ', $cellC1->getCoordinate(), PHP_EOL;
        $sheet->setCellValue('B1', '欧阳'); //设置

    }
}
